%% Copyright (C) 2007 Vijay Gajula <gajulak@gmail.com>.
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without
%% modification, are permitted provided that the following conditions
%% are met:
%%
%% 1. Redistributions of source code must retain the above copyright
%%    notice, this list of conditions and the following disclaimer.
%% 2. Redistributions in binary form must reproduce the above
%%    copyright notice, this list of conditions and the following
%%    disclaimer in the documentation and/or other materials provided
%%    with the distribution.
%%
%% THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
%% OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
%% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
%% ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
%% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
%% DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
%% GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
%% WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
%% NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
%% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-module(netconf).
-vsn(1.0).
-author('gajulak@gmail.com').
-export([init/0, start_link/1, start_link/0, start_link/4, start_link/5, start/0, stop/1]).
-define(SSL_OPTIONS, [{active, false},
		      %% {reuseaddr, true},
		      {certfile, "../server/certs/server.cert"},
		      {keyfile, "../server/certs/server.key"},
		      {cacertfile, "../CAServer/cacert.pem"},
		      {verify, 0},
		      {depth, 0}]).

init() -> start_link().
start() -> start_link().

start_link([]) -> start_link(5454, 10, 60000, undefined).
start_link() -> start_link(5454, 10, 60000, undefined).

start_link(Port, MaxSessions, Timeout, State) ->
    start_link(all, Port, MaxSessions, Timeout, State).

start_link(IP, Port, MaxSessions, Timeout, State) ->
    OptionList = ?SSL_OPTIONS ++ ip(IP),
    %% io:format("Options:~p~n", [OptionList]),
    SessionHandler = {netconf_rpc, handler, [Timeout, State]},
    db:start(),
    ssl_serv:start_link([Port, MaxSessions, OptionList, SessionHandler]).

ip(all) -> [];
ip(IP) when tuple(IP) -> [{ip, IP}].

stop(Pid) -> 
	ssl_serv:stop(Pid),
	db:stop().
